home *** CD-ROM | disk | FTP | other *** search
- #include "bbs.h"
-
- static ULONG GetFileSize(char *s);
- /****************************************************************************\
- DynAllocate
- \****************************************************************************/
-
- ULONG DynAllocate(char **pbuf,ULONG maxbufsize)
- {
- /* first try Fast mem allocate */
- do {
- *pbuf=(char *)AllocMem((ULONG)maxbufsize,MEMF_PUBLIC|MEMF_CLEAR);
- maxbufsize=maxbufsize>>1; if(*pbuf==NULL) Delay(5L);
- } while(*pbuf == NULL && maxbufsize > 8192);
-
- maxbufsize=maxbufsize<<1;
- if(*pbuf!=NULL) return(maxbufsize);
- return(0L);
- }
-
- /* s = from file, d = to file */
- ULONG FileCopy(char *from,char *to)
- {
- UBYTE *buf;
- long bufsize,stat1,stat2;
- BPTR fhs,fhd;
- //if(Rename(from,to)) return(2);
-
- if(bufsize=DynAllocate(&buf,GetFileSize(from)+8192L)) {
- /* got a buffer full of mem */
- if(fhs=Open(to,MODE_OLDFILE)) {
- Close(fhs); /* file exists so return */
- FreeMem(buf,bufsize);
- return(0);
- }
-
- if(fhs=Open(from,MODE_OLDFILE)) {
- if(fhd=Open(to,MODE_NEWFILE)) {
- do {
- stat1=Read(fhs,buf,bufsize); /* Read from file */
- if(stat1>0) stat2=Write(fhd,buf,stat1); /* write to file*/
- } while(stat1>0&&stat2>0);
-
- if(stat1<0) {
- sprintf(GSTR3,"\r\nERROR while reading from %s!\r\n",from);
- AEPutStr(GSTR3);
- }
- if(stat2<0) {
- sprintf(GSTR3,"\r\nERROR while writing to %s!\r\n",to);
- AEPutStr(GSTR3);
- }
- Close(fhd);
- }
- Close(fhs);
- }
- FreeMem(buf,bufsize);
- }
-
- if((stat1>=0&&stat2>=0)) {
- return(1);
- }
- return(0);
- }
-
- static ULONG GetFileSize(char *s)
- {
- struct FileInfoBlock *FBlock;
- BPTR FLock;
- ULONG fsize=8192L;
- if((FLock = Lock(s,ACCESS_READ)) == NULL) {
- return(8192L);
- }
-
- if((FBlock=(struct FileInfoBlock *)AllocDosObject(DOS_FIB,NULL)) == NULL) {
- UnLock(FLock);
- return(8192L);
- }
- if( Examine(FLock,FBlock) ) fsize = FBlock->fib_Size;
- UnLock(FLock);
- FreeDosObject(DOS_FIB,FBlock);
- return(fsize);
- }